class Solution {
public:
    bool isValid(string s) {
        if(s.size() % 2 == 1)
        {
            return false;
        }
        std::unordered_map<char, char> pairs = {
            {')', '('},
            {'}', '{'},
            {']', '['}
        };
        std::stack<char> mystack;
        int num = s.size();
        for(int i=0; i < num; i++)
        {
            if(pairs.count(s[i]))
            {
                if(mystack.empty() || mystack.top() != pairs[s[i]])
                {
                    return false;
                }
                else
                {
                    mystack.pop();
                }
            }
            else
            {
                mystack.push(s[i]);
            }
        }
        return mystack.empty();

    }
};